/*
 * 本QuickStart使用的xml处理包为dom4j
 */
package quickstart;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class QuickStart {

	/*
	 * 必须初始化的 document 对象
	 */
	private Document document;

	/*
	 * 必须被初始化的 xml 文件路径
	 */
	private String fileName;

	/*
	 * 创建一个新的 document 对象
	 */
	public void createDocument() {
		Document document = DocumentHelper.createDocument();
		this.document = document;
	}

	/*
	 * 从已有的 xml 文件路径创建 document 对象
	 */
	public void getExistDocument() throws DocumentException {
		SAXReader reader = new SAXReader();
		this.document = reader.read(new File(fileName));
//		// 这里用 SAXReader 当然还可用 DOMReader 这个体现了dom4j设计的优势
//		DOMReader reader = new DOMReader();
//		this.document = reader.read((org.w3c.dom.Document) new File(fileName));
	}
	
	public void setXMLFile(String fileName) {
		this.fileName = fileName;
	}

	/*
	 * 保存现有 document 对象到给定的 xml 文件路径下！
	 */
	public void saveDocument() throws IOException {
		XMLWriter writer;
		
//		// 指定文件
//		writer = new XMLWriter(new FileWriter(this.fileName));
//		writer.write(this.document);
//		writer.close();

		// 美化格式
		OutputFormat format = OutputFormat.createPrettyPrint();
		writer = new XMLWriter(new FileWriter(this.fileName), format);
		writer.write(this.document);
		writer.close();

//		// 缩减格式
//		format = OutputFormat.createCompactFormat();
//		writer = new XMLWriter(System.out, format);
//		writer.write(this.document);
//		writer.close();
	}

	/*
	 * 获取给定 xpath 查询字符串的节点集合
	 */
	@SuppressWarnings("unchecked")
	public List<Node> getNodesByXPath(String xPath) {
		List<Node> elements = document.selectNodes(xPath);
		return elements;
	}

	public void addNodeExample() {
		Element root = document.addElement("root");

		root.addElement("author").addAttribute("name",
				"James").addText(
				"James Strachan");

		@SuppressWarnings("unused")
		// 这个addElement方法同样获得一个Element对象
		Element author2 = root.addElement("author").addAttribute("name", "Bob")
				.addAttribute("location", "US").addText("Bob McWhirter");
	}
}
